package sistema;

import controloBD.AcessoBD;
import controloBD.QueryResult;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class Competicao {

    private Long id_competicao;
    private String nome;
    private Long id_pais;
    private Long id_modalidade;

    
    private Competicao(Long id, String nome, Long id_pais, Long id_modalidade) {
        this.id_competicao = id;
        this.nome = nome;
        this.id_pais = id_pais;
        this.id_modalidade = id_modalidade;
    }

    private Competicao(Vector tabela) {
        this.id_competicao = (Long) tabela.get(0);
        this.nome = (String) tabela.get(1);
        this.id_pais = (Long) tabela.get(2);
        this.id_modalidade = (Long) tabela.get(3);
    }

    /**
     * @return the id_competicao
     */
    public Long getId_competicao() {
        return id_competicao;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the id_pais
     */
    public Long getId_pais() {
        return id_pais;
    }

    /**
     * @param id_pais the id_pais to set
     */
    public void setId_pais(Long id_pais) {
        this.id_pais = id_pais;
    }

    /**
     * @return the id_modalidade
     */
    public Long getId_modalidade() {
        return id_modalidade;
    }

    /**
     * @param id_modalidade the id_modalidade to set
     */
    public void setId_modalidade(Long id_modalidade) {
        this.id_modalidade = id_modalidade;
    }

    //Insere nova competicao na base de dados
    public static void insereCompeticao(Hashtable params) throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("inserir_nova_competicao");
        conexao.executeUpdate(qryName, params);
        conexao.closeBD();
    }

    //Pesquisa competiçao por id
    public static Competicao devolveCompeticaoPorID(Long id_competicao) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosCompeticao = new Hashtable<String, String>();
        dadosCompeticao.put("var_idcompeticao", id_competicao.toString());
        String qryName = new String("visualizar_por_id_competicao");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosCompeticao);
        conexao.closeBD();

        return new Competicao(qr.tabela());
    }

    //Pesquisa competicões por id do jogador
    public static List<Competicao> devolveCompeticoesPorJogador(Long id_jogador) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosCompeticao = new Hashtable<String, String>();
        dadosCompeticao.put("var_idjogador", id_jogador.toString());
        String qryName = new String("visualizar_por_id_jogador");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosCompeticao);
        conexao.closeBD();

        return (List<Competicao>) new <List>Competicao(qr.tabela());
    }

    public static List<Competicao> devolveCompeticoesPorModalidade(Long id_modalidade) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosCompeticao = new Hashtable<String, String>();
        dadosCompeticao.put("var_idmodalidade", id_modalidade.toString());
        String qryName = new String("visualizar_por_id_modalidade");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosCompeticao);
        conexao.closeBD();
        return (List<Competicao>) new <List>Competicao(qr.tabela());
    }

    public static List<Competicao> devolveCompeticoesPorPais(Long id_pais) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosCompeticao = new Hashtable<String, String>();
        dadosCompeticao.put("var_idpais", id_pais.toString());
        String qryName = new String("visualizar_por_id_pais");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosCompeticao);
        conexao.closeBD();

        return (List<Competicao>) new <List>Competicao(qr.tabela());
    }

    public static List<Competicao> devolveTodas() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("devolve_todasCompeticoes");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();
        return converteTabela(qr);
    }

    public static Long devolveModalidade(Long id_comp) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dados = new Hashtable<String, String>();
        dados.put("var_idcompeticao", id_comp.toString());
        String qryName = new String("visualizar_modalidade_id");
        QueryResult qr = conexao.executeSelect(qryName, dados);
        conexao.closeBD();

        return (Long) qr.tabela().get(0);
    }

    public static List<Competicao> converteTabela(QueryResult qr) {

        List<Competicao> comp = new LinkedList<Competicao>();
        if (!qr.tabela().isEmpty()) {
            int i = 0;
            while (i != qr.tabela().size()) {
                Long id2 = (Long) qr.tabela().get(i);
                String nome = (String) qr.tabela().get(i + 1);
                Long idP = (Long) qr.tabela().get(i + 2);
                Long idM = (Long) qr.tabela().get(i + 3);

                comp.add((new Competicao(id2, nome, idP, idM)));
                i = i + 4;
            }
            return comp;
        }
        return null;
    }
}
